﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Biciq.Datos;

namespace Biciq.Logica
{
    public class RegistroNegocio
    {
        /// <summary>
        /// Metodo utilizado para indicar el tipo de suscripción
        /// </summary>
        /// <returns></returns>
        public List<TipoSuscripcion> ObtenerTipoSuscripcion()
        {
            List<TipoSuscripcion> tiposSuscripcion = new List<TipoSuscripcion>();
            using (BiciqContexto  contexto = new BiciqContexto())
            {
                tiposSuscripcion = contexto.TipoSuscripcions.ToList();
            }
            return tiposSuscripcion;
        }
        /// <summary>
        /// Metodo utilizado para indicar el Pais de Origen del Cliente
        /// </summary>
        /// <returns></returns>
        public List<Pai> ObtenerPais()
        {
            List<Pai> paises = new List<Pai>();
            using (BiciqContexto contexto = new BiciqContexto())
            {
                paises = contexto.Pais.ToList();
            }
            return paises;
        }
        /// <summary>
        /// Metodo utilizado por la aplicación web que permite buscar al Cliente por su numero de cedula
        /// </summary>
        /// <param name="identificacion">Numero de Cedula</param>
        /// <returns></returns>
        public Cliente BuscarClientePorIdentificacion(string identificacion)
        {
            using (BiciqContexto contexto = new BiciqContexto())
            {
                return contexto.Clientes.Where(c => c.Identificacion == identificacion).FirstOrDefault();
            }
        }

        public Parametro ObtenerParametroPorNombre(string nombre)
        {
            using (BiciqContexto contexto = new BiciqContexto())
            {
                return contexto.Parametroes.Where(p => p.Nombre == nombre).FirstOrDefault();
            }
        }
        /// <summary>
        /// Metodo utilizado para la distinción del tipo de suscripción del Cliente.
        /// </summary>
        /// <param name="tipoSuscripcion">Definir tipo de suscripción</param>
        /// <returns></returns>
        public string ObtenerValorSuscripcion(Guid tipoSuscripcion)
        {

            string costo = "$ 0";
            if (tipoSuscripcion == Guid.Parse( "89b84081-c2a6-4b15-99d1-37fd23968ab0"))
            {
                 costo ="$ " +  ObtenerParametroPorNombre("Costo Mensual Suscripción").Valor;
            }
            if (tipoSuscripcion == Guid.Parse("b9977ad3-ac61-4552-8b2d-e791ae776c88"))
            {
                costo = "$ " + ObtenerParametroPorNombre("Costo Anual Suscripción").Valor;
            }

            return costo;
        }
        /// <summary>
        /// Metodo utilizado para obtener el valor de la suscripción
        /// </summary>
        /// <returns></returns>
        public List<Parametro> ObtenerValoresSuscripcion()
        {
            List<Parametro> parametros = new List<Parametro>();
            parametros.Add(ObtenerParametroPorNombre("Costo Mensual Suscripción"));
            parametros.Add( ObtenerParametroPorNombre("Costo Anual Suscripción"));
            parametros.Add(ObtenerParametroPorNombre("Costo Inscripción"));

            return parametros;
        }
        /// <summary>
        /// Metodo utilizado que muestra el valor de la suscripción
        /// </summary>
        /// <param name="tipoSuscripcion"></param>
        /// <returns></returns>
        public Decimal ObtenerValorSuscripcionPorTipo(Guid tipoSuscripcion)
        {
            decimal costo = 0;
            if (tipoSuscripcion == Guid.Parse("89b84081-c2a6-4b15-99d1-37fd23968ab0"))
            {
                costo =Convert.ToDecimal(ObtenerParametroPorNombre("Costo Mensual Suscripción").Valor);
            }
            if (tipoSuscripcion == Guid.Parse("b9977ad3-ac61-4552-8b2d-e791ae776c88"))
            {
                costo = Convert.ToDecimal( ObtenerParametroPorNombre("Costo Anual Suscripción").Valor);
            }

            decimal valorTarjeta = Convert.ToDecimal(ObtenerParametroPorNombre("Costo Inscripción").Valor);

            return costo+ valorTarjeta;
        }



        /// <summary>
        /// Metodo que devuelve el estado del cliente ya sea Activo, Registrado, Rechazado
        /// </summary>
        /// <returns></returns>
        public List<int> GetCountUsuarios()
        {
            List<int> contador = new List<int>();
            using (BiciqContexto contexto = new BiciqContexto())
            {
                contador.Add(contexto.Clientes.Where(c => c.Estado == "Activo").Count());
                contador.Add(contexto.Clientes.Where(c => c.Estado == "Registrado").Count());
                contador.Add(contexto.Clientes.Where(c => c.Estado == "Rechazado").Count());



            }
            return contador;
        }
    }
}
